<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        // 构造函数 ：就是函数 ，你可以把构造函数理解成一个类
        // 构造函数解决了 工厂模式的问题  1. 对象的识别问题  2.性能问题 3.写法变简单了；
        // 构造函数 注意点：约定俗成 首字母大写 
        // 工厂模式
        // function Person(name){
        //     let obj = {};
        //     obj.name = name;
        //     obj.callGirlFriend = function(){
        //           console.log("把大象装进冰箱");
        //     }
        //     return obj;
        // }
        // 构造函数 书写 
        // function Person(name){
        //     // console.log(this);  //this 就是传入的空对象
        //     /* 
        //         obj.name = name;
        //         obj.callGirlFriend = function(){
        //              console.log("把大象装进冰箱");
        //         }
            
        //     */
        //     this.name = name;
        //     this.callGirlFriend = function(){
        //         console.log("把大象装进冰箱");
        //     }
        // }

        // 构造函数如何调用 通过运算符 "new"来调用
        /* 
            new 运算符 再调用的时候做的事情：
                1.创建一个空对象
                2.调用构造函数 然后把this 指向这个空对象
                3.隐式返还 this(创建出来的对象);
        */
       
    //     function mynew (name){
    //         let obj = {};
    //         Person.call(obj,name)
    //         return obj;
    //     }
    //    let xiaoming =  mynew("小明");
    //    let xiaoli =  mynew("小李");
    //    console.log(xiaoli);
        // let xiaoming = new Person("小明");
        // console.log(xiaoming);
        // let xiaozhang = new Person("小张");
        // console.log(xiaozhang);
        
        // 小练习 ：把Dog工厂模式改成构造函数 
        function Dog(name){
            this.name = name ;      // 加工原料
            this.wow = function(){
                console.log("汪汪汪...",this);
                // return 111
            }
            // 隐式返还this
        }
        // 通过new调用 ：new 被称为实例化  实例化之后得到一个对象
        // 强调：构造函数里的this指向哪里？？ 构造函数里的this指向 实例化对象
        let dahuang = new Dog("大黄");
        console.log(dahuang)
        // dahuang.wow();
        // let xiaohei = new Dog("小黑");
        // xiaohei.wow();


        // 总结： 2.this绑定属性和方法  2. new运算符 调用构造函数

    </script>
</body>
</html>